package top.riske.gen3d.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import top.riske.gen3d.DTO.HunyuanInputParamDto;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 3D任务
 */
@Data
@TableName("hunyuan_3d_job")
@NoArgsConstructor
@AllArgsConstructor
public class Hunyuan3DJob {

    /**
     * 任务ID,主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 腾讯3D任务ID
     */
    @TableField("job_id")
    private String jobId;

    /**
     * 请求ID,最近一次的请求ID
     */
    @TableField("request_id")
    private String requestId;

    /**
     * 账号ID
     */
    @TableField("account_id")
    private Long accountId;

    /**
     * 模型名称
     */
    @TableField("model_name")
    private String modelName;

    /**
     * 是否是图片生成3D
     */
    @TableField("image_gen")
    private Boolean imageGen;

    /**
     * 是否启用PBR材质生成
     */
    @TableField("enable_pbr")
    private Boolean enablePBR;

    /**
     * 模型面数40000-500000。
     */
    @TableField("face_count")
    private Integer faceCount;

    /**
     * 模型生成方式，可选值：
     * Normal：可生成带纹理的几何模型，默认。
     * LowPoly：可生成智能减面后的模型。
     * Geometry：可生成不带纹理的几何模型（白模），选择此任务时，EnablePBR参数不生效。
     * Sketch：可输入草图或线稿图生成模型，此模式下prompt和ImageUrl/ImageBase64可一起输入。
     */
    @TableField("generate_type")
    private String generateType;

    /**
     * 任务文本/文生图图片链接
     */
    @TableField("text")
    private String text;

    /**
     * 任务状态，0-WAIT：等待中，1-RUN：执行中，2-FAIL：任务失败，3-DONE：任务成功，
     *          4-DOWNLOAD_FAILED：下载失败，5-success：完全成功
     */
    @TableField("status")
    private int status;

    /**
     * 查询次数,调用腾讯3D接口的次数，防止频繁调用
     */
    @TableField("query_count")
    private int queryCount;

    /**
     * 错误码
     */
    @TableField("error_code")
    private String errorCode;

    /**
     * 错误信息
     */
    @TableField("error_message")
    private String errorMessage;

    /**
     * 创建时间
     */
    @TableField(value = "created_time", fill = FieldFill.INSERT)
    private LocalDateTime createdTime;

    /**
     * 更新时间
     */
    @TableField(value = "updated_time", fill = FieldFill.UPDATE)
    private LocalDateTime updatedTime;

    /**
     * 是否删除
     */
    @TableLogic
    private boolean deleted;


    /**
     * 3D文件列表
     */
    @TableField(exist = false)
    private List<Hunyuan3DFile> resultFile3Ds;

    public Hunyuan3DJob(String jobId, String requestId, HunyuanInputParamDto inputParamDto) {
        this.jobId = jobId;
        this.requestId = requestId;
        this.status = 0;
        this.queryCount = 0;

        this.modelName = inputParamDto.getModelName();
        this.imageGen = inputParamDto.getImageGen();
        this.text = inputParamDto.getText();
        this.enablePBR = inputParamDto.getEnablePBR();
        this.faceCount = inputParamDto.getFaceCount();
        this.generateType = inputParamDto.getGenerateType();
    }


}
